Amazon QuickSightのSPICEデータセットのデータ容量をサイジングしてみた
はじめに
データアナリティクス事業本部の藤川です。
QuickSightを使用していて気になるのがSPICE
(Super-fast, Parallel, In-Memory Calculation Engine)データセットの容量です。 料金表にSPICE
の容量に応じて課金されるとありますが、どのくらいのデータ容量を見込んでおけば良いのでしょうか?
SPICE
データセットの容量を見積もる計算式がありましたので、実際にデータを投入し、確認してみました。サイジングする際のご参考にしてください。
計算方法
QuickSightで取り扱えるデータ型
まず始めにQuickSightで取り扱えるデータ型についてです。大きく分けて、次の3種類です。
※参考:サポートされているデータ型と値 - Amazon QuickSight
- 日付(Date)
- 10進数(Decimal)、整数(Integer)、Boolean(数値として扱われる)
- 文字列(String)
計算方法
データ型ごとに、専有するデータ容量が異なります。各カラムのデータ容量から、1レコードに必要なデータ容量が求まります。これにデータ件数を掛けるだけです。
※参考:SPICE データセットの容量計画 - Amazon QuickSight
データ型 | データ容量 |
---|---|
日付(Date) | 8バイト |
10進数(Decimal)、整数(Integer)、Boolean(数値として扱われる) | 8バイト |
文字列(String) | 8バイト + UTF-8の文字長 |
Total logical row size in bytes = (Number of Numeric Fields * 8 bytes per field) + (Number of Date Fields * 8 bytes per field) + (Number of Text Fields * (8 bytes + UTF-8 encoded character length per field) ) Total bytes of data = Number of rows * Total logical row size in bytes GB of SPICE Capacity Needed = Total bytes of data / 1,073,741,824
やってみた
それでは、実際にCSVファイルを用いて、SPICE容量を見積もってみましょう。
CSVファイル
用意したCSVファイルは、国土交通省の位置参照情報です。 Athena等に取り込みやすいよう、文字コードをShift-JISからUTF-8に変換しています。
項目 | 値 |
---|---|
ファイルサイズ | 4,662,856バイト(約4.5MB) |
レコード件数 | 19,600,780行 |
CSVファイルのヘッダーは次の通りです。
"都道府県名","市区町村名","大字・丁目名","小字・通称名","街区符号・地番","座標系番号","X座標","Y座標","緯度","経度","住居表示フラグ","代表フラグ","更新前履歴フラグ","更新後履歴フラグ"
テーブル(Athena)
Glueデータカタログ
を使用し、CSVファイルをAthenaに取り込みました。テーブル定義は、Glueが自動で定義したものです。
また、各カラムに入っている文字列データの最大文字長
について確認しました。
カラム名 | 都道府県名 | 市区町村名 | 大字・丁目名 | 小字・通称名 | 街区符号・地番 | 座標系番号 | X座標 | Y座標 | 緯度 | 経度 | 住居表示フラグ | 代表フラグ | 更新前履歴フラグ | 更新後履歴フラグ |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
データ型 | string | string | string | string | string | bigint | double | double | double | double | bigint | bigint | bigint | bigint |
最大文字長 | 4文字 | 10文字 | 14文字 | 10文字 | 8文字 | - | - | - | - | - | - | - | - | - |
データセット(SPICE)
QuickSightの画面に表示されるSPICE
データセットのデータ容量とレコード件数です。
項目 | 値 |
---|---|
データ容量 | 約4.8GB |
レコード件数 | 19,600,780行 |
計算してみた
UTF-8の文字長
以外
データ型ごとに何カラムあるか表にまとめました。一番右の列が1レコードごとに必要なデータ容量です。
ここでは、UTF-8の文字長
以外で、1レコード当たり112バイト
必要ということが分かります。
データ型 | データ容量 | 数量 | 合計 |
---|---|---|---|
日付(Date) | 8バイト | なし | 0バイト |
10進数(Decimal)、整数(Integer)、Boolean(数値として扱われる) | 8バイト | 9カラム | 72バイト |
文字列(String) | 8バイト + UTF-8の文字長 | 5カラム | 40バイト + UTF-8の文字長 |
UTF-8の文字長
UTF-8の文字長
は、前掲の表から抜粋しました。ここでは、合計46文字ですが、バイト数ではないことに注意してください。
ダブルバイトの文字列の場合、UTF-8の文字長
は3バイトとして見積もっておきます。
46文字は3倍の138バイト
となります。
カラム名 | 都道府県名 | 市区町村名 | 大字・丁目名 | 小字・通称名 | 街区符号・地番 |
---|---|---|---|---|---|
最大文字長 | 4文字 | 10文字 | 14文字 | 10文字 | 8文字 |
合計
UTF-8の文字長
以外(112バイト)とUTF-8の文字長
(138バイト)を合計し、1レコード当たり250バイト必要ということが分かります。
これに、レコード件数(19,600,780行)を掛けて、GB単位に変換すると、SPICE
容量が約4.56GB必要という見積値が得られます。
250バイト/行 x 19,600,780行 = 約4.56GB
先ほど、UTF-8の文字長
を3バイトと仮定し、見積もっていますので、多少誤差が出ているのではないかと思われます。
さいごに
SPICE
はとにかく高速です。データソースに対し、無駄なスキャンが走ることを抑えることで、AWS利用料の削減を期待できます。
一方で、SPICE
の容量は制限があります。SPICE
データセットの容量計画をしておくことで、QuickSightを最大限のパフォーマンスで利用できるようになるでしょう。
※参考:データソースクォータ - Amazon QuickSight